package com.liangtian.mdm.system.user.dao;

import com.liangtian.mdm.base.BaseDao;
import com.liangtian.mdm.system.menu.model.Menu;
import com.liangtian.mdm.system.permission.model.SysRole;
import com.liangtian.mdm.system.user.model.SysUser;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <p>Encoding    :  UTF-8</p>
 * <p>Package Name: com.liangtian.mdm.system.sysDictionary.dao </p>
 * <p>Project Name: dm </p>
 * <p>Copyright   :  Copyright(c) 2016 石化盈科信息技术有限责任公司 </p>
 * <p>Created Time: 2016-04-22 17:31</p>
 * <p>Description : 用户持久层</p>
 *
 * @author : beamzhang
 * @version :  1.0
 */
@Repository
public interface SysUserDao extends BaseDao<SysUser> {

    /**
     * @param param
     * @return 分页条件下信息
     * @desc 获取未提交的用户列表
     */
    List<Map<String, Object>> selectUserListWithNotSubmit(Map<String, Object> param);

    /**
     * @param param
     * @return 分页条件下信息
     * @desc 获取用户列表信息
     */
    List<Map<String, Object>> selectUserListByCondition(Map<String, Object> param);

    List<Map<String, Object>> queryUsers(Map<String, Object> param);

    /**
     * * <p>Title:查询不是本模型下的用户 </p>
     * <p>Description: TODO </p>
     * <p>Company:@param param
     * <p>Company:@return </p>
     *
     * @author : xiaoliu
     * @date :2016年11月3日下午4:10:45
     */

    List<Map<String, Object>> queryUserListWithoutUserId(Map<String, Object> param);

    /**
     * @param param
     * @return 分页条件下信息
     * @desc 获取审核用户列表信息
     */
    List<Map<String, Object>> selectShUserListByCondition(Map<String, Object> param);

    /**
     * @param user
     * @return 分页条件下信息
     * @desc 获取全部User信息(包含查询)
     */
    List<Map<String, Object>> selectUserPageByCondition(SysUser user);

    /**
     * @param user
     * @return
     * @desc 插入中间表数据
     */
    int insertUser(SysUser user);

    List<SysUser> selectUserOrginazation(Map<String, Object> param);

    /**
     * @param user 对象
     * @return 受影响的行数
     * @desc 编辑 （编辑数据；启用-1；禁用-0）
     */
    int updateUser(SysUser user);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 批量删除 （编辑数据；启用-1；禁用-0）
     */
    int batchDeleteUser(Map<String, Object> params);

    /**
     * @param params
     * @return
     * @desc 插入中间表数据
     */
    int insertUserRoleRef(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 批量删除关联数据
     */
    int deleteUserRoleRefMap(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 批量删除关联数据
     */
    int deleteUserRoleRef(Map<String, Object> params);

    /**
     * @param
     * @return 受影响的行数
     * @desc 批量删除关联数据
     */
    int selectUserAccount(Map<String, Object> params);

    /**
     * @return 受影响的行数
     * @desc 编辑用户状态
     */
    int editUserStatus(Map<String, Object> params);

    /**
     * @param user
     * @return
     * @desc 根据用户id查询用户
     */
    SysUser selectUserById(SysUser user);

    /**
     * @param user
     * @return
     * @desc 根据用户ids查询批量用户
     */
    List<SysUser> selectUserByIds(String value);


    /**
     * @param user
     * @return
     * @desc 根据用户id查询用户
     */
    Map<String, Object> selectUserWithOrganizaNameById(SysUser user);

    /**
     * 查询角色信息
     *
     * @param user
     * @return
     */
    List<SysRole> selectRole(SysUser user);

    /**
     * 查询用户组信息
     *
     * @param user
     * @return
     */
    List<Map<String, Object>> selectUserGroup(@Param(value = "userId") Long userId);

    /**
     * 查询菜单树
     *
     * @param menu
     * @return
     */
    public List<Menu> queryMenuTree(Map<String, Object> params);

    /**
     * @param params 用户帐号
     * @return 用户信息
     * @desc 根据帐号查询用户
     */
    SysUser queryUserByUserAccount(@Param("userAccount") String userAccount);

    /**
     * 查询用户所属的用户组
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> selectTheUserGroup(Map<String, Object> params);

    /**
     * @return 受影响的行数
     * @desc 更新用户状态
     */
    int updateUserStatusBatch(List<SysUser> list);

    /**
     * 用户批量创建_删除
     */
    int deleteByPk(Map map);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 删除用户角色
     */
    int deleteUserRole(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 增加用户角色
     */
    int insertUserRole(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 用户权限赋值--按钮权限（根据用户id删除用户按钮权限）
     */
    int deleteUserPreButton(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 用户权限赋值--按钮权限（根据用户id赋值插入用户按钮权限）
     */
    int insertUserPreGroup(Map<String, Object> params);


    /**
     * @param params
     * @return 受影响的行数
     * @desc 用户权限赋值--视图权限（根据用户id删除用户按钮权限）
     */
    int deleteUserPreGroup(Map<String, Object> params);


    /**
     * @param params
     * @return 受影响的行数
     * @desc 用户权限赋值--属性权限（根据用户id赋值插入用户属性权限）
     */
    int insertUserPreAttr(Map<String, Object> params);


    /**
     * @param params
     * @return 受影响的行数
     * @desc 用户权限赋值--属性权限（根据用户id删除用户属性权限）
     */
    int deleteUserPreAttr(Map<String, Object> params);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 用户权限赋值--视图权限（根据用户id赋值插入用户按钮权限）
     */
    int insertUserPreButton(Map<String, Object> params);


    /**
     * * <p>Title: 查看输入的用户账号是否被使用</p>
     * <p>Description: TODO </p>
     * <p>Company:@param userAccount
     * <p>Company:@return </p>
     *
     * @author : xiaoliu
     * @date :2016年10月27日下午2:59:45
     */
    int queryUserByAccount(String userAccount);

    /*
    根据oauserid查询
     */
    int queryUserByOAUserId(String oAUserId);


    /**
     * @param params
     * @return 受影响的行数
     * @desc 批量解冻和冻结数据
     */
    int updateByIds(Map<String, Object> params);

    List<String> queryUsersIdByAccount(String userAccount);

    /**
     * 移动端用户登录
     *
     * @param param userAccount : 用户账号
     *              passWord    : 账号密码
     * @return
     * @author jyh
     * @date 2017-06-06
     */
    public SysUser mobileCheckLogin(Map<String, Object> param);

    /**
     * @param user 对象
     * @return 受影响的行数
     * @desc 编辑密码 （编辑数据；启用-1；禁用-0）
     */
    int updatePwd(Map map);

    /**
     * @param params
     * @return 受影响的行数
     * @desc 重置密码
     */
    int resetPass(List<SysUser> sulst);

    int updateUserByOAUserID(SysUser sysUser);
}